#pragma once
#include <strings.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/epoll.h>
#include <error.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define N 4
#define IP "127.0.0.1"
#define PORT "8080"

enum 
{
    FREE = 0,
    BASY = 1
};

typedef struct
{
    pid_t pid;
    int local_fd;
    int state;
} Process;

typedef struct
{
    int file_name_len;
    char file_name[50];
} fileName_t;


// 初始化进程池
int init_pool(Process poll[], int n);

// 绑定端口
int main_tcp(int* fd, const char* ip, const char* port);

// epoll中添加监听
int epoll_pool_add(int fd, int epoll_fd);

// epoll中删除监听
int epoll_pool_del(int fd, int epoll_fd);

// 分配任务
int allocating_task(Process pool[], int n, int sock_fd, int epoll_fd);

// 子进程的执行
int son(int local_fd);

// local
int local_send(int local_fd, int sock_fd);
int local_recv(int local_fd, int* sock_fd);

// 添加新用户
int add_usr(int fd, int current, int epoll_fd);
